package com.songlanyun.modules.protocolconfig.service.impl;

import java.util.Objects;

import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.songlanyun.common.enums.ProtocolConfigConstant;
import com.songlanyun.common.exception.RRException;
import com.songlanyun.common.utils.BeanUtil;
import com.songlanyun.common.validator.ValidatorUtils;
import com.songlanyun.modules.protocolconfig.dao.ProtocolConfigDao;
import com.songlanyun.modules.protocolconfig.entity.ProtocolConfigEntity;
import com.songlanyun.modules.protocolconfig.modle.dto.ProtocolConfigDTO;
import com.songlanyun.modules.protocolconfig.service.ProtocolConfigService;

import cn.hutool.core.util.ObjectUtil;

/**
 * 协议管理
 *
 * @author lijiahe 2022-08-05
 */
@Service("protocolConfigService")
public class ProtocolConfigServiceImpl extends ServiceImpl<ProtocolConfigDao, ProtocolConfigEntity>
    implements ProtocolConfigService {

    @Override
    public void addOrEdit(ProtocolConfigDTO dto) {
        ValidatorUtils.validateEntity(dto);

        String markCode = dto.getMarkCode();
        ProtocolConfigEntity protocolConfigEntity = this.loadProtocolConfigByMarkCode(markCode, false);
        ProtocolConfigEntity entity = new ProtocolConfigEntity();
        BeanUtil.copyPropertiesIgnoreNull(dto, entity);
        if (ObjectUtil.isNull(protocolConfigEntity)) {
            baseMapper.insert(entity);
        } else {
            entity.setId(protocolConfigEntity.getId());
            baseMapper.updateById(entity);
        }

    }

    @Override
    public ProtocolConfigEntity loadProtocolConfigByMarkCode(String markCode, Boolean tw) {
        ProtocolConfigEntity entity = baseMapper
            .selectOne(new LambdaQueryWrapper<ProtocolConfigEntity>().eq(ProtocolConfigEntity::getMarkCode, markCode));
        if (tw && null == entity) {
            throw new RRException(String.format("不存在%s",
                Objects.requireNonNull(ProtocolConfigConstant.TypeEnum.getByCode(markCode)).getMsg()));
        }
        return entity;
    }

}
